package com.pb.wkflow.api.service;

import com.pb.infra.oth.entity.common.Result;
import com.pb.wkflow.api.controller.request.ProcessTaskRequest;
import com.pb.wkflow.api.controller.response.TaskResponse;

import java.util.List;

/**
 * @author 苗益辉
 * @date 2022/9/20 15:46
 */
public interface ProcTaskService {

    /**
     * 查询待办列表
     * @param pageNum 页码
     * @param pageSize 页数
     * @param request 请求
     * @return Result
     */
    Result findToDoList(Integer pageNum, Integer pageSize, ProcessTaskRequest request);

    /**
     * 查询待办数量
     * @return Result
     */
    Result queryTodoCount();


    /**
     * 查询已办列表
     * @param pageNum 页码
     * @param pageSize 页数
     * @param request 请求
     * @return Result
     */
    Result findHasDoneList(Integer pageNum, Integer pageSize, ProcessTaskRequest request);

    /**
     * 查询我申请列表
     * @param pageNum 页码
     * @param pageSize 页数
     * @param request 请求
     * @return Result
     */
    Result findMyApplyList(Integer pageNum, Integer pageSize, ProcessTaskRequest request);

    /**
     * 提交任务
     * @param request request
     * @return TaskResponse
     */
    TaskResponse submitTask(ProcessTaskRequest request, String processStatus);

    /**
     * 拒绝任务（结束流程）
     * @param request request
     * @return TaskResponse
     */
    TaskResponse refuseTask(ProcessTaskRequest request);

    /**
     * 终止流程/结束任务
     * @param request request
     * @return TaskResponse
     */
    TaskResponse terminateTask(ProcessTaskRequest request);

    /**
     * 退回到任务前一节点/撤回
     * @param request request
     * @return TaskResponse
     */
    TaskResponse backPreTask(ProcessTaskRequest request);

    /**
     * 回收已完成任务
     * @param request request
     * @return TaskResponse
     */
    TaskResponse reBackTask(ProcessTaskRequest request);

    /**
     * 退回到首个用户节点
     * @param request request
     * @return TaskResponse
     */
    TaskResponse backToFirstUserTask(ProcessTaskRequest request, String processStatus);

    /**
     * 转派、调度任务
     * @param request request
     * @return TaskResponse
     */
    TaskResponse transferTask(ProcessTaskRequest request);

    /**
     * 调度任务给另一批人,不更新审批记录
     * @param request request
     * @return TaskResponse
     */
    TaskResponse transferTask2Others(ProcessTaskRequest request);

    /**
     * 发起人发起
     * @param request request
     */
    void submitByStart(ProcessTaskRequest request);

    /**
     * 发起人收回
     * @param request request
     * @return TaskResponse
     */
    TaskResponse reBackByStart(ProcessTaskRequest request);

    /**
     * 批量通过
     * @param requests requests
     * @return Result
     */
    Result batchSubmitTask(List<ProcessTaskRequest> requests);

    /**
     * 批量拒绝
     * @param requests requests
     * @return Result
     */
    Result batchRefuseTask(List<ProcessTaskRequest> requests);

    /**
     * 获取列表的各审批类型的数量
     * @param request request
     * @return Result
     */
    Result getApprovalTypeCount(ProcessTaskRequest request);
}
